package com.jjyd.crlp.model.base;

import com.jjyd.crlp.model.code.CommonErrorCode;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.util.List;

/**
 * 返回给前端的list，可用此类封装
 */
@Data
@ApiModel("返回前端的list数据model")
public class ResultListModel<T,U> extends ResultModel<U> {

    /**
     * list数据信息
     */
    @ApiModelProperty(value = "list数据")
    private List<T> listData;

    /**
     * 页码数，从1开始计算
     */
    @ApiModelProperty(value = "页码数，从1开始计算")
    private Integer page;

    /**
     * 每页的数据
     */
    @ApiModelProperty(value = "每页数量")
    private Integer size;

    /**
     * 总页面数
     */
    @ApiModelProperty(value = "总页数")
    private Integer totalPages;

    /**
     * 返回一个list数据对象以及页面的详细信息
     *
     * @param listData list对象
     * @param pageRequestInfo 页面信息
     * @param count 总记录数
     */
    public ResultListModel(List<T> listData,PageRequestInfo pageRequestInfo,Integer count){
        this.listData = listData;
        if (this.listData == null) {
            this.errorCode = CommonErrorCode.DATA_NULL;
            this.errorMessage = "无结果";
        }
        this.page = pageRequestInfo.getPage();
        this.size = pageRequestInfo.getSize();
        this.totalPages = (count - 1) / pageRequestInfo.getSize() + 1;
    }

    /**
     * 返回所有的信息（不分页）
     * @param listData list对象
     */
    public ResultListModel(List<T> listData) {
        this.listData = listData;
        if (this.listData == null) {
            this.errorCode = CommonErrorCode.DATA_NULL;
            this.errorMessage = "无结果";
        }
    }

    /**
     * 返回所有信息的list（不分页），并且返回其他的数据类型
     * @param listData list数据
     * @param otherData 其他数据
     */
    public ResultListModel(List<T> listData, U otherData) {
        this.listData = listData;
        if (this.listData == null) {
            this.errorCode = CommonErrorCode.DATA_NULL;
            this.errorMessage = "无结果";
        }
        this.data = otherData;
    }

    /**
     * 此构造方法用于返回错误类型
     * @param code 错误代码
     * @param msg 错误信息
     * @param otherData 其他类型
     */
    public ResultListModel(String code, String msg, U otherData) {
        super(code,msg,otherData);
    }

}
